﻿using System;
using System.Reflection;
using IMath; // 引用IMath命名空间
namespace MathConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 1. 填写正确的Math.dll路径（必须是编译后的绝对路径）
                string mathDllPath = @"C:\Users\胡云123\source\repos\Math\bin\Debug\net8.0\Math.dll";

                // 2. 加载Math.dll（处理可能的null）
                Assembly? mathAssembly = Assembly.LoadFrom(mathDllPath);
                if (mathAssembly == null)
                {
                    Console.WriteLine("无法加载Math.dll");
                    return;
                }

                // 3. 获取实现类类型（确保命名空间+类名正确）
                Type? mathType = mathAssembly.GetType("Math.MathOperation");
                if (mathType == null)
                {
                    Console.WriteLine("未找到Math.MathOperation类");
                    return;
                }

                // 4. 创建实例并转换为接口（处理可能的null）
                IMathOperation? math = Activator.CreateInstance(mathType) as IMathOperation;
                if (math == null)
                {
                    Console.WriteLine("无法创建IMathOperation实例");
                    return;
                }

                // 5. 测试计算（此时math不为null，无CS8602警告）
                double a = 10, b = 5;
                Console.WriteLine($"{a} + {b} = {math.Add(a, b)}");
                Console.WriteLine($"{a} - {b} = {math.Subtract(a, b)}");
                Console.WriteLine($"{a} × {b} = {math.Multiply(a, b)}");
                Console.WriteLine($"{a} ÷ {b} = {math.Divide(a, b)}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"错误: {ex.Message}");
            }
            Console.ReadLine();
        }
    }
}